﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace exercice5
    {
    /// <summary>
    /// Class mère de tous les véhicules à moteur
    /// La capacité du réservoir est une information à donner au constructeur (non static)
    /// </summary>
    public abstract class VehiculeMoteur : Vehicule, IEngine
        {
        public VehiculeMoteur(String nom, double consommation, double capaciteReservoir)
            : base(nom)
            {
            this.m_consommation = consommation;
            this.m_capaciteReservoir = capaciteReservoir;
            this.m_kilometrage = 0;
            this.m_quantiteEssence = 0;
            }

        void IEngine.showGPSPosition()
            {
            System.Console.WriteLine("** You're lost sorry ! **");
            }

        double IEngine.drive(double dist)
            {
            if ((this.m_consommation * dist / 100) > this.m_quantiteEssence)
                {
                IEngine tmp = this;
                tmp.fillTank();
                }
            this.m_quantiteEssence -= this.m_consommation * dist / 100;
            this.m_kilometrage += dist;
            return this.m_kilometrage;
            }

        bool IEngine.startEngine()
            {
            return (this.m_quantiteEssence > 5) ? true : false;
            }

        void IEngine.fillTank()
            {
            System.Console.WriteLine("** On fait le plein ! **");
            this.m_quantiteEssence = this.m_capaciteReservoir;
            }

        public override void rouler(double km)
            {
            this.m_kilometrage += km;
            }

        public override void louer()
            {
            base.louer();
            this.m_kilometrage = 0;
            }

        public override void afficher()
            {
            base.afficher();
            System.Console.WriteLine("consommation : " + this.m_consommation + " l/100km");
            System.Console.WriteLine("capacité du réservoir : " + this.m_capaciteReservoir + "L");
            }

        double consommation { get { return this.m_consommation; } }
        double capaciteReservoir { get { return this.m_capaciteReservoir; } }
        double kilometrage { get { return this.m_kilometrage; } }
        double quantiteEssence { get { return this.m_quantiteEssence; } }

        protected double m_consommation;
        protected double m_capaciteReservoir;
        protected double m_kilometrage;
        protected double m_quantiteEssence;
        }
    }
